#include "EnvoiInfosProxy.h"

/*************************************************************************
                        ReceptionInfosProxy  -  description
                             -------------------

*************************************************************************/

//---- Réalisation de la tâche <ReceptionInfosProxy> (fichier ReceptionInfosProxy.cpp) ---



//------------------------------------------------------ Fonctions privées

void EnvoiInfoProxyInit(int bal)
{
	 balInfoActionneur = bal;




}

void EnvoiInfoProxyMoteur()
{

	while(1)
	{
		MsgInformation msgInfo;
		int ctrl;
		long longueur = 0;
		ctrl = msgrcv(balInfoActionneur,&msgInfo,sizeof(msgInfo),longueur,0); //attente d'informations à envoyer au proxy
		if(ctrl == -1)
		{
			perror("[EnvoiInfoProxy] Erreur de réception du message de la boite aux lettres\n");
			switch(errno)
			{
				case E2BIG : perror("[EnvoiInfoProxy] Erreur : E2BIG\n"); break;
				case EACCES : perror("[EnvoiInfoProxy] Erreur : EACCESS\n"); break;
				case EIDRM : perror("[EnvoiInfoProxy] Erreur : EACCESS\n"); break;
				case EINTR : perror("[EnvoiInfoProxy] Erreur : EACCESS\n"); break;
				case EINVAL : perror("[EnvoiInfoProxy] Erreur : EACCESS\n"); break;
				case ENOMSG : perror("[EnvoiInfoProxy] Erreur : EACCESS\n"); break;
				case EFAULT : perror("[EnvoiInfoProxy] Erreur : EACCESS\n"); break;
			}
			exit(1);
		}
		else
		{
			printf("[EnvoiInfoProxy] Message recu ! %s\n",msgInfo.info.date);
			printf("[EnvoiInfoProxy] ID actionneur : %s\n",msgInfo.info.idCapteur);

			char message[100];//string dans laquelle est stocké le message de commande de l'actionneur
			sprintf(message, "%i%s%s", msgInfo.msgType, "$", msgInfo.info.idCapteur/*, "$", msgInfo.info.typeCapteur, "$", msgInfo.info.valeur*/);
			if(msgInfo.info.typeCapteur[0] != '\0')
			{
				sprintf(message, "%s%s%s", message, "$", msgInfo.info.typeCapteur);
			}
			if(msgInfo.info.valeur[0] != '\0')
			{
				sprintf(message, "%s%s%s", message, "$", msgInfo.info.valeur);
			}
			sprintf(message, "%s%s", message, "$");
			printf("[EnvoiInfoProxy] Message de commande actionneur à envoyer : %s\n", message);


			printf("Envoi de la commande au proxy via le socket %i", clients[0]);
			if(send(clients[0], message, strlen(message), 0) < 0)
			{
				perror("[EnvoiInfoProxy] Erreur lors de l'envoi de la commande actionneurn");
			}

			/*
			//Envoi de la commande actionneur au proxy
			if ( (sock = socket(AF_INET, SOCK_STREAM, 0)) < 0 ) //création d'une socket
			{
				perror("[EnvoiInfoProxy] socket error");
			}
			else
			{
				 bzero(&sock_in, sizeof(sock_in));
				 sock_in.sin_family = AF_INET;

				 sock_in.sin_port = htons(PORT);

				 if (inet_pton(AF_INET, ADRESSE_PROXY, &sock_in.sin_addr) <= 0){
					 //inet_pton: convertit l'argument ASCII (Ex: 127.0.0.1) dans le bon format
					 perror("[EnvoiInfoProxy] inet_pton error");
				 }
				 else
				 {
					 //requete de connexion
					 if(connect( sock,(struct sockaddr *)&sock_in, sizeof(sock_in)) < 0 )
					 {
						 //connect etablit la connection TCP avec le serveur specifie par la structure de
						 //l'adresse du socket pointe par le second argument
						 perror("[EnvoiInfoProxy] connect error");
					 }
					 else
					 {
						if(send(sock, message, strlen(message), 0) < 0)
						{
							perror("[EnvoiInfoProxy] Erreur lors de l'envoi de la commande actionneurn");
						}
					 }
					 close(sock);
				 }
			}*/
		}
	}
}

//////////////////////////////////////////////////////////////////  PUBLIC
//---------------------------------------------------- Fonctions publiques
void EnvoiInfosProxy(void* bal)
{
	int idBal = (int)bal;
	EnvoiInfoProxyInit(idBal);
	EnvoiInfoProxyMoteur();
}

